<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // Promise的拓展方法    => Promise实例使用
    // 用法 p.then()  p.catch()    p.finally()

    // debugger;
    // 异步操作 => 两秒后 改变Promise实例的状态 
    var p = new Promise(function (resolve, reject) {
        // debugger;

        // aaaa;

        setTimeout(function () {
            // debugger;
            var num = 0.6;
            console.log(num);

            if (num >= 0.5) {  //大于0.5 变为已成功
                resolve("正面:不拖堂");
            } else {
                reject("反面:拖堂");
            }
        }, 1000);
    })

    // then(callback1,callback2)  用于指定状态改变时,执行的回调函数 (提前决定好状态改变之后执行的回调函数, 等Promise实例状态改变之后执行)
    // callback1()  等Promise实例的状态由pending(进行中) 改为 fulfilled(已成功) 时执行此回调函数
    // callback2()  等Promise实例的状态由pending(进行中) 改为 rejected(已失败)时执行此回调函数

    // callback1() /  callback2() 可以设置一个形式参数,用于接收Promise实例中存储的数据

    // 注意:
    // 1. 主线程上,同步任务先执行 异步任务后执行 => 其实then()在异步操作 有结果之前执行 => 提前决定好状态改变之后执行的回调函数, 等Promise实例状态改变之后执行

    // 2. then() 的返回值是一个新的Promise实例  => 后面可以继续使用then和catch (链式)

    // p.then(function (arg) {
    //     debugger;
    //     console.log("已成功", arg);
    // }, function (arg) {
    //     debugger;
    //     console.log("已失败", arg);
    // })

    // p.then(null, function (arg) {
    //     // debugger;
    //     console.log("已失败", arg);
    // })

    // ------------------------------------------------------------------------

    // catch(rejectHandler)   用于指定Promise实例变为rejected(已失败)时执行的回调函数 (用于指定发生错误时的回调函数。)
    // catch(用于指定发生错误时的回调函数。 => 可以捕获整个链式操作过程中出现的错误)

    // then()方法的返回值也是一个新的Promise实例 => 新的Promise实例依赖于前一个Promise实例的状态

    // Promise实例 什么时候会为rejected(已失败)的状态?
    // 1. 通过调用reject() 方法可以变为 rejected状态
    // 2. Promise的回调函数在执行过程中 出现错误(代码错误,语法错误) => 被try...catch捕获 => Promise实例也会变为rejected状态 => 错误的信息会存储到 Promise实例中


    // finally()方法用于指定不管 Promise 对象最后状态如何，都会执行的操作

    // p.catch(function (arg) {
    //     // debugger;
    //     console.log("已失败", arg);
    // })

    // then catch的链式操作  => 成功就走then  失败走catch
    // p.then(function (arg) {
    //     console.log("已成功", arg);
    //     bbbbbb;

    // }).catch(function (err) {
    //     console.log("已失败", err);
    // }).finally(function(){
    //         console.log(11111);
    // })

    // 拆分理解
    // var p1 = p.then(function (arg) {
    //     console.log("已成功", arg);
    //     bbbbbb;
    // })
    // p1.catch(function (err) {
    //     console.log("已失败", err);
    // })





</script>

</html>